//
//  WTHomeController.swift
//  WTSinaWeibo
//
//  Created by  Wellim on 16/6/24.
//  Copyright © 2016年  Wellim. All rights reserved.
//

import UIKit

// cell 可重用标识符
private let homeCellId = "statusCellId"

class WTHomeController: WTVisitorController {

     // 定义保存微博数据的数组
    var statusArray: [WTStatus] = [WTStatus]()
    //全局的刷新控件
    let refresh = CZRefresh()
    
    override func viewDidLoad() {
        super.viewDidLoad()

        /*
         判断用户是否登录
         - 登录
         - 未登录 设置访客视图信息
         */
        
        if !isLogin {
            
            visitorView?.setUpVisitorViewInfo(nil, title: nil)
            
            return
        }
        
         // 请求微博首页数据
        
        loadStatusData(activityView.isAnimating())
//        loadStatusData { (result) in
//            // 赋值
//           self.statusArray = result
//           // 刷新UI
//            self.tableView.reloadData()
//            
//        }
//        
        // 设置tableView 相关属性
        setUpTableViewInfo()
        
}
    
     // 设置tableView 相关属性
    
    func setUpTableViewInfo(){
    // 获取class  格式: 类名.self
    tableView.registerClass(WTStautsCell.self, forCellReuseIdentifier: homeCellId)
    // 指定tableViewCell 高度
//    tableView.rowHeight = 300
        
        // 自动计算行高UITableViewAutomaticDimension
       tableView.rowHeight = UITableViewAutomaticDimension
        // 预估行高(预估行高越接近真实高度越好)
        tableView.estimatedRowHeight = 200
        
        //去掉TableView的分割线
        tableView.separatorStyle = .None
        // 设置footView
        tableView.tableFooterView = activityView
      
        // 创建UIRefreshControl
        // 添加事件
        refresh.addTarget(self, action: "refreshAction", forControlEvents: UIControlEvents.ValueChanged)
        tableView.addSubview(refresh)
        
        
        
    }
    
    // MARK: - 监听事件
    @objc private func refreshAction(){
    
       loadStatusData(activityView.isAnimating())
        
//  dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(2 * NSEC_PER_SEC)), dispatch_get_main_queue()) {
//    // 结束刷新
//     self.refresh.endRefreshing()
//    
//        }
    
//dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(<#delayInSeconds#> * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//    
//});
    }

   // MARK: - 懒加载控件
    private lazy var activityView: UIActivityIndicatorView = {
        
      let view = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        // 设置颜色
        view.color = ThemeColor
        
        return view
        
    }()
    


    
}

// MARK: - 请求首页数据
extension WTHomeController{
// pullUp 上啦 == true
    func loadStatusData(pullup: Bool){
        // 如果我们sinceId = 0 && maxId = 0 系统默认就相当于我们只传accessToken
        //        如果 下拉刷新 MaxId = 0 代表我要拿时间最新的微博
        //        如果 上拉加载更多 SinceI的 = 0 代表我要拿时间更早的微博
        var sinceId:Int64 = 0
        var maxId:Int64 = 0
        // 上拉加载更多
        if pullup {
            
            maxId = statusArray.last?.id ?? 0
            //则返回ID小于或等于max_id的微博
        }else{
         // 下拉刷新
            sinceId = statusArray.first?.id ?? 0
        
        }
       
       WTNetworktools.sharedNetworktools.HomeloadDate(sinceId, maxId: maxId, success: { (resposnse) in
        // 菊花停止转动
        //下面有方法重写
//        self.activityView.stopAnimating()
       self.endRefreshing()
        
        // 判断我们请求回来数据是否有值 而且是否是一个数组
        guard  let res = resposnse?["statuses"] as?[[String:AnyObject]] else{
            
            print("返回数据为nil 或者 类型不匹配")
            return
            
        }
        
        var tempArray:[WTStatus] = [WTStatus]()
        // 遍历数组 完成字典转模型
        for dic in res{
            
            let status = WTStatus(dict: dic)
            
            tempArray.append(status)
            
        }
        // 上拉加载更多
        if pullup{
        
          self.statusArray = self.statusArray + tempArray
        
        }else{
        // 下拉刷新
          self.statusArray = tempArray + self.statusArray
        }
        
         // 刷新UI
            self.tableView.reloadData()

        
        }) { (error) in
            
           print("失败\(error)")
        }
        
//       WTNetworktools.sharedNetworktools.HomeloadDate({ (resposnse) in
//       
//    // 判断我们请求回来数据是否有值 而且是否是一个数组
//        guard  let res = resposnse?["statuses"] as?[[String:AnyObject]] else{
//       
//          print("返回数据为nil 或者 类型不匹配")
//            return
//        
//        }
//        
//        var tempArray:[WTStatus] = [WTStatus]()
//        // 遍历数组 完成字典转模型
//        for dic in res{
//        
//         let status = WTStatus(dict: dic)
//            
//            tempArray.append(status)
//        
//        }
//         // 执行闭包 吧数据反出去
////        callBack(result: tempArray)
//        self.statusArray = tempArray
//        // 刷新UI
//        self.tableView.reloadData()
//        
//        }) { (error) in
//            
//            print("失败\(error)")
//        }
//
    
    }


    // 结束动画
    
    func endRefreshing(){
        
        self.activityView.stopAnimating()
        self.refresh.endRefreshing()
        
    }


}

extension WTHomeController{

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
         return self.statusArray.count ?? 0
    }

   
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
         let cell = tableView.dequeueReusableCellWithIdentifier(homeCellId, forIndexPath: indexPath) as! WTStautsCell
       
        
        // 给cell赋值
        
        cell.status = self.statusArray[indexPath.row]
        
        return cell
    }
    
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        
        if statusArray.count == indexPath.row + 1 && !activityView.isAnimating(){
            
             // 开启动画
            activityView.startAnimating()
            // 请求数据
            loadStatusData(activityView.isAnimating())
            
        }
        
        
    }


}
